package cn.tedu.eb_film.service;

import cn.tedu.eb_film.pojo.dto.*;
import cn.tedu.eb_film.pojo.vo.UserJwtInfo;
import cn.tedu.eb_film.pojo.vo.UserListItemVO;
import cn.tedu.eb_film.pojo.vo.UserStandardVO;

import java.util.List;

/**
 * 用户表(User)表服务接口
 *
 * @author HおE
 * @since 2023-03-14 18:38:25
 */
public interface UserService {
    /**
     * 类别“是否启用”的状态文本
     */
    String ENABLE_TEXT[] = {"禁用", "启用"};
    /**
     * 类别“是否显示在导航栏”的状态文本
     */
    String DISPLAY_TEXT[] = {"隐藏", "显示"};

    /**
     * 新增数据
     *
     * @param userAddNewDTO 实例对象
     * @return 实例对象
     */
    void insert(UserAddNewDTO userAddNewDTO);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    void deleteById(Long id);

    /**
     * 根据ID修改数据
     *
     * @param userUpdateDTO 实例对象
     * @return 实例对象
     */
    void updateInfoById(Long id,UserUpdateDTO userUpdateDTO);


    /**
     * 启用类别
     *
     * @param id 尝试启用的类别的id
     */
    void setEnable(Long id);

    /**
     * 禁用类别
     *
     * @param id 尝试禁用的类别的id
     */
    void setDisable(Long id);

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    UserStandardVO selectById(Long id);

    /**
     * 根据特定字段查询数据列表
     *
     * @return 实例对象列表
     */
    List<UserListItemVO> selectByLike(UserLikeDTO userLikeDTO);

    /**
     * 查询数据列表
     *
     * @return 实例对象列表
     */
    List<UserListItemVO> selectList();

    /**
     * 根据手机号发送验证码
     * @param phone 手机号
     */
    void seedCode(String phone);


    /**
     * 用户账号密码登录
     *
     * @param UserLoginDto 登录信息
     * @return 实例对象
     */
    UserJwtInfo accountLogin(UserLoginDto UserLoginDto);

    /**
     * 用户手机号登录
     *
     * @param userAddNewDTO 登录信息
     * @return 实例对象
     */
    void phoneLogin(UserAddNewDTO userAddNewDTO);

    /**
     * 查询手机号是否存在
     * @param phone 手机号
     */
    void countByPhone(String phone);


    void see(UserSeeDTO userSeeDTO);


}
